home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / zugabe / va45 / visual45 / objects / form / text.s < prev   
Text File  |  1998-09-06  |  9KB  |  331 lines

  1.     DATA
  2.  
  3. GWVA_FTEXT_DEFAULT_METHODLIST:
  4.     ifd MDL_FORM_EDITABLE_TEXT
  5.     GWVA_OBJ_STRUCT_METHOD    GWVA_METHOD_FORM_KEYPRESS,GWVA_FTEXT_PRG_KEYPRESS
  6.     GWVA_OBJ_STRUCT_METHOD    GWVA_METHOD_FORM_KEYBD,GWVA_FORM_PRG_FORM_KEYB
  7.     GWVA_OBJ_STRUCT_METHOD    GWVA_METHOD_FORM_OBJC_EDIT,GWVA_FORM_PRG_FORM_OBJC_EDIT
  8.      ifd OPT_GWVA_WFORM_POS_CURS_WITH_MOUSE
  9.     GWVA_OBJ_STRUCT_METHOD    GWVA_METHOD_FORM_CLICK,GWVA_FTEXT_PRG_CLICK
  10.      endc    ; OPT_GWVA_WFORM_POS_CURS_WITH_MOUSE
  11.     endc    ; ifd MDL_FORM_EDITABLE_TEXT
  12.     GWVA_OBJ_STRUCT_METHOD    GWVA_METHOD_CREATE,GWVA_FTEXT_PRG_CREATE
  13.     GWVA_OBJ_STRUCT_METHOD_END_LIST
  14.  
  15.     TEXT
  16.  
  17.     ;!!!!!!!!!!!!!!!!!!!!!
  18.  
  19.     ifd MDL_FORM_EDITABLE_TEXT
  20.  
  21.     ;!!!!!!!!!!!!!!!!!!!!!
  22.  
  23.     ifd OPT_GWVA_WFORM_POS_CURS_WITH_MOUSE
  24.  
  25. ;------------------------------------------------------------------------------
  26. ; Method name : GWVA_METHOD_FORM_CLICK
  27. ; Asm label   : GWVA_FTEXT_PRG_CLICK
  28. ; Description : Méthode de traitement d'un clic dans un formulaire
  29. ;
  30. ; Rq  : cette méthode traite le clic dans un champs de texte éditable
  31. ;
  32. ; in  : a0.l = pointeur sur l'objet
  33. ; in  : a1.l = pointeur sur le buffer d'entrée typé GWVA_FORM_CLICK_IN
  34. ; in  : d0.l = [ X.w | num gem.w ]
  35. ; in  : d1.l = [ Y.w | mouse button.w ]
  36. ; in  : d2.l = [ Key state.w | mouse count.w ]
  37. ; out : d6.w = GWVA_PRGRET_NOT_CONSUMED ou GWVA_PRGRET_CONSUMED
  38. ;
  39. ; 05/09/98 : Création
  40. ;------------------------------------------------------------------------------
  41. GWVA_FTEXT_PRG_CLICK:
  42.  
  43.     GWVA_EXEC_VISUAL_EVENT    #GWVA_METHOD_ON_FORM_CLICK
  44.     cmp.w #GWVA_SEARCH_EXEC_CONSUMED,d6
  45.     beq .pas_textclick_car_on_textclick_consomme
  46.  
  47.     ;-----------------------------------;
  48.  
  49.     cmp.w GWVA_FTEXT_OBJ_MAIN_IDX(a0),d0
  50.     bne .je_ne_suis_pas_concerne_par_ce_msg
  51.  
  52.  
  53.     save.l d0-d2/a0-a1
  54.     move.l GWVA_FORM_CLICK_IN_WIND_PTR(a1),a0
  55.     bsr GWVA_WFORM_HIDE_CURSOR
  56.     load.l d0-d2/a0-a1
  57.  
  58. *    save.l d0-d2/a0-a1
  59.     ; d0 à jour        ; No objet
  60.     move.l d0,d1
  61.     swap d1        ; X
  62.     move.l GWVA_FORM_CLICK_IN_WIND_PTR(a1),a0
  63.     bsr GWVA_FORM_PRG_DRAW_CURSOR_X
  64. *    load.l d0-d2/a0-a1
  65.  
  66.     ;-----------------------------------;
  67.  
  68. .pas_textclick_car_on_textclick_consomme:
  69.     moveq #GWVA_PRGRET_CONSUMED,d6
  70.     rts
  71.  
  72. .je_ne_suis_pas_concerne_par_ce_msg:
  73.     moveq #GWVA_PRGRET_NOT_CONSUMED,d6
  74.     rts
  75.  
  76.     endc    ; OPT_GWVA_WFORM_POS_CURS_WITH_MOUSE
  77.  
  78. ;------------------------------------------------------------------------------
  79. ; Method name : GWVA_METHOD_FORM_KEYPRESS
  80. ; Asm label   : GWVA_FTEXT_PRG_KEYPRESS
  81. ; Description : Méthode pour traiter l'effet de l'appui d'une touche sur un champ texte
  82. ;
  83. ; in  : a0.l = pointeur sur l'objet
  84. ; in  : a1.l = pointeur sur la fenêtre formulaire contenant l'objet
  85. ; in  : a2.l = pointeur sur l'arbre formulaire en question
  86. ; in  : d0.w = index GEM de l'objet devant faire l'objc_edit
  87. ; in  : d1.w = position du curseur
  88. ; in  : d2.w = [ Key state.w | Key code.w ]
  89. ; out : d6.w = GWVA_PRGRET_NOT_CONSUMED ou GWVA_PRGRET_CONSUMED
  90. ;
  91. ; 09/05/98 : Création
  92. ;------------------------------------------------------------------------------
  93. GWVA_FTEXT_PRG_KEYPRESS:
  94.  
  95.     GWVA_EXEC_VISUAL_EVENT    #GWVA_METHOD_ON_FORM_KEYPRESS
  96.     cmp.w #GWVA_SEARCH_EXEC_CONSUMED,d6
  97.     beq .pas_keypress_car_on_keypress_consomme
  98.  
  99.     ;-----------------------------------;
  100.  
  101.     cmp.w GWVA_FTEXT_OBJ_MAIN_IDX(a0),d0
  102.     bne .je_ne_suis_pas_concerne_par_ce_msg
  103.  
  104.     cmp.w #$0f09,d2        ; Tab ?
  105.     bne.s .pas_tab
  106.     move d2,d4
  107.     swap d4
  108.     and.w #%11,d4
  109.     beq.s .pas_shift_tab        ; Shift+Tab ?
  110.     ; oui,alors on remplace la touche par un appui sur la flèche haut
  111.     move.l #$4800,d2        ; on on efface le Key state (.l)
  112. .pas_shift_tab:
  113. .pas_tab:
  114.  
  115.     lea FKEYB_TMP_IN_BUF,a3
  116.     move.l a1,GWVA_FORM_KEYB_IN_WIND_PTR(a3)
  117.     move.l a2,GWVA_FORM_KEYB_IN_TREE_PTR(a3)
  118.  
  119.     save.l a1/a2
  120.  
  121.     move.l a3,a1
  122.     lea FKEYB_TMP_OUT_BUF,a2
  123.  
  124.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS    #GWVA_METHOD_FORM_KEYBD
  125.  
  126.     move.w GWVA_FORM_KEYB_OUT_RET_CODE(a2),d3
  127.     move.w GWVA_FORM_KEYB_OUT_NEW_OBJECT(a2),d4
  128.     move.w GWVA_FORM_KEYB_OUT_KEY_OUT(a2),d5
  129.  
  130.     load.l a1/a2
  131.  
  132.     ;-----------------------------------;
  133.  
  134.     cmp.w #GWVA_SEARCH_EXEC_CONSUMED,d6
  135.     bne .touche_pas_consommee
  136.  
  137.     tst d3    ; 0 = bouton 'exit' default, 1 = pas de bouton en 'default'
  138.     beq .objet_defaut_active
  139.  
  140.     cmp.w d0,d4
  141.     beq .new_obj_equiv_old_obj
  142.  
  143.     save.l a0-a2/d0-d2/d4
  144.     move.l a1,a0
  145.     bsr GWVA_WFORM_HIDE_CURSOR
  146.     load.l a0-a2/d0-d2/d4
  147.  
  148.     ; voilà pour l'index
  149.     move.w d4,GWVA_WFORM_OBJ_FOCUSED_IDX(a1)
  150.  
  151.     ; positionne si possible au même endroit dans le nouveau champ texte éditable
  152.     save.l a0-a2/d0-d2
  153.     move.w GWVA_WRSC_OBJ_TREE(a1),d0
  154.     move d4,d1
  155.     bsr GWVA_RSC_COUNT_TEXT_OBJ_LENGTH
  156.     move d1,d3
  157.     load.l a0-a2/d0-d2
  158.     cmp.w GWVA_WFORM_OBJ_FOCUSED_IDX_CURSOR_POS(a1),d3
  159.     bge.s .nouvelle_pos_inf_taille_max_champ
  160.     move.w d3,GWVA_WFORM_OBJ_FOCUSED_IDX_CURSOR_POS(a1)    ; on limite, on met au bout !
  161. .nouvelle_pos_inf_taille_max_champ:
  162.  
  163.     ; calculons maintenant la position du curseur (le plus dur)
  164.     ; taille courante du champs où l'on vise à mettre le curseur
  165.     save.l a0-a2/d0-d2
  166.     move.w GWVA_WRSC_OBJ_TREE(a1),d0
  167.     move.w d4,d1
  168.     bsr GWVA_RSC_RETURN_PTR_ON_TEXT
  169.     move.l a1,a0
  170.     bsr GWVA_COUNT_BYTES_0
  171.     move d0,d3
  172.     load.l a0-a2/d0-d2        ; => d3
  173.  
  174.     cmp.w GWVA_WFORM_OBJ_FOCUSED_IDX_CURSOR_POS(a1),d3
  175.     bge.s .dans_le_champs    ; on ne fait rien puisque la position est bonne
  176.     move.w d3,GWVA_WFORM_OBJ_FOCUSED_IDX_CURSOR_POS(a1)
  177. .dans_le_champs:
  178.  
  179.     save.l a0-a2/d0-d2
  180.     move.l a1,a0
  181.     bsr GWVA_WFORM_REDRAW_CURSOR
  182.     load.l a0-a2/d0-d2
  183.  
  184.     bra .new_focused_object_updated
  185.  
  186.             ;-----------------;
  187.  
  188. .objet_defaut_active:
  189.  
  190.     save.l a0-a1
  191.  
  192.     move.w d4,d0    ; index
  193.     move.l a2,a0    ; arbre
  194.     bsr GWVA_RSC_RETURN_OBJ_POS_SIZE
  195.  
  196.     load.l a0-a1
  197.  
  198.     asr.w #1,d2
  199.     asr.w #1,d3
  200.     add.w d2,d0        ; on tappe en plein au milieu de l'objet
  201.     add.w d3,d1
  202.  
  203.     save.l a0
  204.  
  205.     swap d0        ; X mot haut d0
  206.     move.l a1,a0    ; ptr fenetre
  207.     move.w GWVA_WIND_OBJ_GEM_HANDLE(a0),d0    ; handle
  208.  
  209.     swap d1
  210.     move #1,d1        ; pour mettre le .w haut de d1 à 1
  211.     swap d1
  212.     moveq #1,d2        ; key state=0 | mouse count=1
  213.  
  214.     GWVA_CALL_METHOD_OTHER_OBJ    #GWVA_METHOD_WIND_CLICK
  215.  
  216.     load.l a0
  217.  
  218.     bra.s .default_object_treated
  219.  
  220.     ;-----------------------------------;
  221.  
  222. .touche_pas_consommee:
  223.  
  224. *    tst d6            ; a-t-il réussi à la traiter ?
  225. *    beq .fkbd_a_pu_traiter_la_touche
  226.  
  227.     lea FOBJC_EDIT_TMP_IN_BUF,a3
  228.     move.l a1,GWVA_FORM_OBJC_EDIT_IN_WIND_PTR(a3)
  229.     move.l a2,GWVA_FORM_OBJC_EDIT_IN_TREE_PTR(a3)
  230.  
  231.     save.l d2/d5/a1/a2
  232.  
  233.     move d5,d2        ; touche in pour objc_edit = out du form_keyb
  234.     move.l a3,a1
  235.     lea FOBJC_EDIT_TMP_OUT_BUF,a2
  236.  
  237.     GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS    #GWVA_METHOD_FORM_OBJC_EDIT
  238.  
  239.     move.w GWVA_FORM_OBJC_EDIT_OUT_CURS_NEW_POS(a2),d4
  240.  
  241.     load.l d2/d5/a1/a2
  242.  
  243.     move.w d4,GWVA_WFORM_OBJ_FOCUSED_IDX_CURSOR_POS(a1)
  244.  
  245.     cmp.w #$4b00,d5    ; pas terrible, je sais (si vous avez mieux ...)
  246.     beq.s .fleche_gauche    ; pas de changed : on a juste bougé le curseur
  247.     cmp.w #$4d00,d5
  248.     beq.s .fleche_droite
  249.  
  250.     ; Attention : positionner les paramètres d'entrée + sauver les courants
  251.     GWVA_EXEC_VISUAL_EVENT    #GWVA_METHOD_FORM_CHANGED
  252.  
  253. .fleche_gauche:
  254. .fleche_droite:
  255.  
  256.     ;-----------------------------------;
  257.  
  258. .default_object_treated:
  259. .fkbd_a_pu_traiter_la_touche:
  260. .new_focused_object_updated:
  261. .new_obj_equiv_old_obj:
  262.  
  263. .pas_keypress_car_on_keypress_consomme:
  264.     moveq #GWVA_PRGRET_CONSUMED,d6
  265.     rts
  266.  
  267. .je_ne_suis_pas_concerne_par_ce_msg:
  268.     moveq #GWVA_PRGRET_NOT_CONSUMED,d6
  269.     rts
  270.  
  271.     ;-----------------------------------;
  272.  
  273.  BSS
  274. FKEYB_TMP_IN_BUF:    ds.b GWVA_FORM_KEYB_IN_STRUCT_LENGTH
  275. FKEYB_TMP_OUT_BUF:    ds.b GWVA_FORM_KEYB_OUT_STRUCT_LENGTH
  276. FOBJC_EDIT_TMP_IN_BUF:    ds.b GWVA_FORM_OBJC_EDIT_IN_STRUCT_LENGTH
  277. FOBJC_EDIT_TMP_OUT_BUF:    ds.b GWVA_FORM_OBJC_EDIT_OUT_STRUCT_LENGTH
  278.  TEXT
  279.  
  280. ;------------------------------------------------------------------------------
  281.  
  282.     ;!!!!!!!!!!!!!!!!!!!!!
  283.  
  284.     endc    ; ifd MDL_FORM_EDITABLE_TEXT
  285.  
  286.     ;!!!!!!!!!!!!!!!!!!!!!
  287.  
  288. ;------------------------------------------------------------------------------
  289. ; Method name : GWVA_METHOD_CREATE
  290. ; Asm label   : GWVA_FTEXT_PRG_CREATE
  291. ; Description : Création d'un objet formulaire
  292. ;
  293. ; in  : a0.l = pointeur sur l'objet
  294. ; in  : a1.l = pointeur sur la fenêtre
  295. ; in  : a2.l = pointeur sur le tree du ressource
  296. ; out : d6.w = GWVA_PRGRET_CONSUMED
  297. ; out : d7.w = GWVA_NO_ERROR_GENERIC ou erreur
  298. ;       GWVA_ERROR_BAD_CLASS
  299. ;
  300. ; 09/05/98 : Création
  301. ;------------------------------------------------------------------------------
  302. GWVA_FTEXT_PRG_CREATE:
  303.     GWVA_CHECK_OBJ_HANDLE
  304.  
  305.     ;-----------------------------------;
  306.  
  307.     move.w GWVA_WRSC_OBJ_TREE(a1),d0
  308.     move.w GWVA_FTEXT_OBJ_MAIN_IDX(a0),d1
  309.     save.l a0-a2
  310.     bsr GWVA_RSC_RETURN_PTR_ON_TEXT
  311.     move.l a0,a3
  312.     move.l a1,a4
  313.     load.l a0-a2
  314.     move.l a3,GWVA_FTEXT_OBJ_MAIN_PTR(a0)
  315.     move.l a4,GWVA_FTEXT_OBJ_STRING_PTR(a0)
  316.  
  317.     ;-----------------------------------;
  318.  
  319.     ; envoyer la méthode GWVA_METHOD_CREATED
  320.  
  321.     GWVA_EXEC_VISUAL_EVENT    #GWVA_METHOD_CREATED
  322.  
  323.     moveq #GWVA_PRGRET_CONSUMED,d6
  324.     moveq #GWVA_NO_ERROR_GENERIC,d7
  325.     rts
  326.  
  327. .bad_object_class:
  328.     move #GWVA_ERROR_BAD_CLASS,d7        ; pas une classe formulaire
  329.     moveq #GWVA_PRGRET_CONSUMED,d6
  330.     rts
  331.